圖片來源:官方介紹
AWS CodeBuild 是無伺服器(Serverless)的持續整合(CI)服務,主要提供自動編譯程式碼、運行測試並生成可部署的文件,在整個 AWS CI/CD 流程中是最重要的,CodeBuild 優勢在於它的無伺服器特性,所以大幅降低維護的負擔,另外與 AWS 服務的整合也是另一個優勢。
CodeArtifacts 也是 AWS 的一項服務,可以用套件管理工具將不同環境需要的套件,打包成所需的最終成品放進去,軟體套件彼此的相依關係也會儲存
基本上 CodeBuild 的使用除了編譯、生成環境文件(如 Docker Image)、就是建立測試環境執行測試,但是如果是較單純的部署也是可以透過 CodeBuild 來實作,不需要使用 AWS 的 CodeDeploy
建置專案 (Build projects)
建置專案定義了 CodeBuild 如何執行構建。它包含有關源代碼位置、使用的構建環境、要運行的構建命令以及存儲構建輸出的位置等信息。
建置規格 (Buildspec)
Buildspec 是一個 YAML 文件,定義了 CodeBuild 執行建立時要運行的命令和相關設定。它通常位於源代碼存儲庫的根目錄,名為 buildspec.yml
。
環境 (Environments)
CodeBuild 環境是執行 CodeBuild 當中程式的容器化環境。AWS 提供了多種設定環境種類,涵蓋常見的操作系統、編程語言和工具。您也可以創建自訂環境。
原始碼 (Source)
原始碼指定了構建的輸入位置。CodeBuild 支持多種源代碼提供商,包括 AWS CodeCommit、GitHub、Bitbucket 等。
【Day 20】Data Pipeline CI / CD - AWS CodeCommit
version: 0.2
env:
variables:
key: "value"
secrets-manager:
key: secret-id:json-key:version-stage:version-id
git-credential-helper: no | yes
phases:
install:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
runtime-versions:
runtime: version
commands:
- command
finally:
- command
pre_build:
run-as: Linux-user-name
on-failure: ABORT | CONTINUE
commands:
- command
finally:
- command
build:
{... 如同 pre_build ...}
post_build:
{... 如同 pre_build ...}
artifacts:
files:
- ...
name: ...
建立過程分為四個主要階段:install、pre_build、build 和 post_build。
四個階段習慣上會分成不同功能,如果想要用一個達成其實也可以:
每個階段的結構都相似,且都是可選的,架構細節如下:
version: 0.2
phases:
install:
runtime-versions:
python: 3.9
commands:
- echo "Installing dependencies..."
- pip install --upgrade pip
- pip install -r requirements.txt
pre_build:
commands:
- echo "Running static code analysis..."
- flake8 .
build:
commands:
- echo "Running unit tests..."
- pytest tests/
- echo "Building the application..."
- python setup.py
post_build:
commands:
- echo "Running integration tests..."
- python -m pytest integration_tests/
artifacts:
files:
- '**/*'
name: my-python-app-$(date +%Y-%m-%d)
install
(安裝階段):指定 Python 3.9
為運行版本、更新 pip、安裝 requirements.txt
中的模組pre_build
(預建立階段):使用 flake8
進行靜態代碼分析build
(建立階段):pytest
運行單元測試、建立應用程序post_build
(建立後階段):pytest
運行整合測試artifacts
:'**/*' 表示包含所有文件和子目錄,name 是定義名稱,這裡使用動態名稱,包含app名稱和當前日期預設情況下,檔案名稱是
buildspec.yml
,但在建立 CodeBuild 的時候也可以另外設定,所以也會依照不同的需求去設定名稱,例如:buildspec_debug.yml
和buildspec_release.yml